<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\Date;
use Carbon\Carbon;

class AppServiceProvider extends ServiceProvider
{
    public function register(): void
    {
        //
    }

    public function boot(): void
    {
        Schema::defaultStringLength(191);
        
        // 设置全局 Carbon 日期序列化格式
        // 这样所有 Carbon 实例在序列化为 JSON 时都会使用此格式
        // 注意：这主要用于直接序列化 Carbon 实例的情况
        // 对于模型，建议使用 BaseModel 的 serializeDate() 方法或 Resource 的 formatDateTime() 方法
        Date::serializeUsing(function ($date) {
            if ($date instanceof Carbon) {
                // 转换为应用时区并格式化为 Y-m-d H:i:s
                $timezone = config('app.timezone', 'Asia/Shanghai');
                return $date->copy()->setTimezone($timezone)->format('Y-m-d H:i:s');
            }
            return $date;
        });
    }
}
